package de.hska.gp.adventure.labyrinthos4d.logik;

/**
 * Automat um die Räume, welcher der SPieler durchläuft darzustellen.
 * @author Martin Napiwotzky, Oliver Eichner
 * @version 0.1
 */
public class Raumomat {
	private Raum[] raums;
	private int inRaum = -1;
	
	/**
	 * Standartkonstruktor, erstellt mögliche Räume mit deren Aus-/Eingängen
	 */
	public Raumomat() {
		raums = new Raum[16];
		
		// Vektoren initialisieren
		raums[0] = new Raum(new int[]{2,4,6,9});
		raums[1] = new Raum(new int[]{1,3,7,10});
		raums[2] = new Raum(new int[]{4,2,8,11});
		raums[3] = new Raum(new int[]{3,1,5,12});
		raums[4] = new Raum(new int[]{8,6,4,13});
		raums[5] = new Raum(new int[]{7,5,1,14});
		raums[6] = new Raum(new int[]{6,8,2,15});
		raums[7] = new Raum(new int[]{5,7,3,16});
		raums[8] = new Raum(new int[]{10,12,14,1});
		raums[9] = new Raum(new int[]{9,11,15,2});
		raums[10] = new Raum(new int[]{12,10,16,3});
		raums[11] = new Raum(new int[]{11,9,13,4});
		raums[12] = new Raum(new int[]{16,14,12,5});
		raums[13] = new Raum(new int[]{15,13,9,6});
		raums[14] = new Raum(new int[]{14,16,10,7});
		raums[15] = new Raum(new int[]{13,15,11,8});
	}
	
	/**
	 * Setzt den Spieler in den ersten Raum
	 */
	public void starteSpiel() {
		inRaum = 1;
	}
	
	/**
	 * Bewegt den Spieler von Seinem aktuellen Standpunkt, anhand einer Richtungsangabe in einen anderen Raum.
	 * @param richtung Richtung in welche der Spieler gehen möchte
	 * @return Gibt den neuen Raum zurück
	 */
	public int laufeRichtung(int richtung) {
		inRaum = raums[inRaum-1].lauf(richtung);
		return inRaum;
	}
	
	/**
	 * Gibt den Aktuellen Raum zurück, in dem sich der Spieler befindet.
	 * @return Aktueller Raum
	 */
	public int getRaum() {
		return inRaum;
	}
}
